#构造函数:__init__，用于初始化对象
#析构函数：__del__,用于清除对象，主要作用是销毁占用内存的临时变量
#构造函数和析构函数没有返回值，析构函数没有参数
from test.testpackage1 import Student

class ClassName1:
    def __init__(self):
        print('这是构造函数')
    def __del__(self):
        print('这是析构函数')
#Name1=ClassName1()#这是构造函数
"""
for i in range(1,100):
    print(i,end=' ')
print(100)
#这是析构函数，说明析构函数在整个程序运行结束后才会执行
"""
'''
del Name#这是析构函数，说明如果调用del就直接执行析构函数
for i in range(1,100):
    print(i,end=' ')
print(100)
'''
#__str__()函数，在输出变量对象时打印自定义内容
class ClassName2:
    def __init__(self,name):
        self.name=name
    def __str__(self):
        return '你的名字是：%s'%self.name
Name2=ClassName2('Name2')
print(Name2)#输出Name2，即__str__的作用是让定义的对象拥有一个对应的字符串
#私有属性和方法：在属性和方法前加__
#不能通过对象访问，只能通过内部访问
#不能被子类继承和访问
#作用是处理类内部的事务

#强行获取语法：对象._类名__属性名
myname=Student('uni',18,'python','m','保密')
#print(myname.age)不能从外部访问，因为是私有属性
print(myname._Student__age)#不要看警告很多，确实输出了18，说明想要获取私有属性就得无视风险继续访问
#有没有正规的方法？有的兄弟，有的
#只要在类中定义一个公有方法，在公有方法里引用私有属性是没有问题的，接下来懂得都懂，实在不行就print嘛
#同理，不能直接从外部调用私有方法，但是在内部定义调用私有方法的公有方法来实现
myname.share_info()
'''
名称为uni
年龄为18
性别是:m
学习科目:python
'''